home *** CD-ROM | disk | FTP | other *** search
/ Mind Run / Mind Run (1991)(Crealude)(FR)(M6)[!][CFI MINDRUM 91148].iso / me48.amos / me48.amosSourceCode
AMOS Source Code  |  2008-12-15  |  38KB  |  1,038 lines

  1. '                            Me48                       16  4  91    
  2. Set Buffer 20 : Close Editor 
  3. If Exist("CFI:") : Dir$="CFI:" : Else Dir$="GIGUNA:GAMOS/" : End If 
  4. Randomize Timer
  5. '
  6. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  7. PLACES2: Data 2,2,1,0,5,2,2,0
  8. PLACES3: Data 3,1,2,0,2,2,1,1,4,2,2,1
  9. PLACES4: Data 2,1,1,0,4,1,2,0,2,3,1,1,4,3,2,1
  10. PLACES5: Data 2,1,1,0,4,1,2,0,3,2,2,1,2,3,1,2,4,3,2,2
  11. PLACES6: Data 2,1,1,0,4,1,2,0,1,2,1,1,5,2,2,1,2,3,1,2,4,3,2,2
  12. PLACES7: Data 2,1,1,0,4,1,2,0,1,2,1,1,3,2,2,1,5,2,3,1,2,3,1,2,4,3,2,2
  13. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  14. '
  15. '
  16. '
  17. ''''''  Animations de pr∩┐╜sentation  '''''''''''''''''''''''''''''''''''''
  18. '
  19. Global AMP2$,AMP3$,DSP$
  20. '
  21. '
  22. '                pour arriv∩┐╜es en bouquet  
  23. '
  24. AMP2$="M R0,R1,20"
  25. '
  26. '         pour les couples    .........  r∩┐╜glable par R2 R3 R4 R5  
  27. '
  28. P$="M R0,R1,30;Pause;"
  29. P$=P$+"R: L R8=X-R2;L R8=Z(R8);L R6=0-R8;If Z(1)>0 J S;L R6=Z(R3-X);"
  30. P$=P$+"S: L R9=Y-R4;L R9=Z(R9);L R7=0-R9;If Z(1)>0 J T;L R7=Z(R5-Y);"
  31. AMP3$=P$+"T:;M R6,R7,20;P;Pause;J R"
  32. '
  33. '
  34. '            pour la destruction des boules
  35. DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(0,1)"
  36. DSP$=DSP$+";M 0,100,60"
  37. '
  38. '''''''''''''    PROGRAMME   ''''''''''''''''''''''''''''''''''''''
  39. '
  40. Dim TPTS(6),ZBUT(28),BBUT(28),ZBI(36),RSV(16,2),H(28),V(28),CPL(8,3)
  41. Dim XB(2),YB(2),Z(36),CUR(12,9,2),GAM$(12),PREF(5),SON(14,6,3),F$(20)
  42. Global TEST,TPTS(),TEMPS,PTS,APTS,NBK,NBI,NB,NBUT,ZBUT(),BBUT(),DIFF
  43. Global BUT$,SG$,SA$,SB$,ZBI(),RSV(),H(),V(),CPL(),XB(),YB(),Z(),CUR(),HCR,VCR
  44. Global BBOULE,XT,YT,XH,YH,XR,YR,BCUR,HCURS,VCURS,XC,YC,XP,YP,CX,CY,SON()
  45. Global BCP,CYCLETAPE,ETAPE,QST,MXETAPE,DIFF,DERANN$,ELTEMPS,GAUCHE
  46. Global DUREE,VITESSE,BZN,MZ,ABANDON,RENOUV$,TSAB,TREN,LANGUE$,TEST$
  47. Global LIGNE,DIT,GAM$(),PREF(),BOUTONS,BOUTONA,BOUTONB,FAITMUSE
  48. Global BOULBK,CRSBK,FLCHBK,CERVBK,BASEBLOCK,F$(),DC,DIT7,DIT8,FERMEDES
  49. '
  50. '                          M E M O I R E                     ''''''''  
  51. '
  52. '
  53. TEST$="Memory" : TEST=1 : INITEST
  54. ''''''''''''''''''''''' Boucle de test ''''''''''''''''''''''''''''''' 
  55. While ETAPE<MXETAPE and Not ABANDON
  56.    PAUSEPOINTS : Exit If Param=3
  57.    VOISTEST : TIREBANK : PTS=Min(9,2*DIFF) : METPOINTS
  58.    PARLE["Look",0] : VIDCUR[1]
  59.    On 1+Int((QST-1)/2) Proc NTRUS,SURVI,ODRE,PAIR
  60.    '
  61.    '''' au joueur ''''''''''''''''''''''''''''''''''''''''''''''''
  62.    VITESSE=$FFFF : DUREE=$FFFF : TEMPS[0] : TSAB=Timer+49
  63.    MONOCUR
  64.    BRUIT[0,0,"tiroircaiss2"] : If BOUTONB and(PREF(4)=1) Then PREF(4)=0
  65.    GAUCHE[3,45] : Bob Off : AJOUR
  66.    If PTS<APTS Then DESTROYTOUT
  67.    FAITTOTAL : NETTOIE[1] : F=Free
  68. Wend 
  69. RETOUR
  70. ''''''''''''''       Les Questions de M∩┐╜moire    
  71. Procedure NTRUS
  72.    NB=DIFF+1 : H0=560-DC : V0=270
  73.    '  animation pour intrus et survivants .. r∩┐╜glable par RA RB RC RD   
  74.    '
  75.    ' La plage d'∩┐╜volution 
  76.    Amreg(0)=340-DC : Amreg(1)=570-DC : Amreg(2)=12 : Amreg(3)=167
  77.    P$="M R0,R1,30;Pause;"
  78.    P$=P$+"R: L R8=X-RA;L R8=Z(R8);L R6=0-R8;If Z(1)>0 J S;L R6=Z(RB-X);P;"
  79.    P$=P$+"S: L R9=Y-RC;L R9=Z(R9);L R7=0-R9;If Z(1)>0 J T;L R7=Z(RD-Y);P;"
  80.    AMP1$=P$+"T:;M R6,R7,30;P;Pause;J R"
  81.    '
  82.    Restore "PLACES"+Str$(NB)-" " : TIRE[0]
  83.    For B=1 To NB
  84.       Read H,V,CX,CY : H=(H*52)+290-DC : V=V*68-65
  85.       TIRE[NBK] : Channel B To Bob B : Bob B,H0,V0,Param : Wait Vbl 
  86.       Amreg(0)=340-DC : Amreg(1)=570-DC : Amreg(2)=12 : Amreg(3)=167
  87.       Amal B,AMP1$ : Amreg(B,0)=H-H0 : Amreg(B,1)=V-V0 : Amal On B
  88.       AJOUR
  89.       If(ETAPE mod 2)=0
  90.          Wait ELTEMPS : Amal Off B : Bob B,0,0, : Wait Vbl 
  91.       End If 
  92.    Next 
  93.    TIRE[NBK] : NOUVEAUB=Param
  94.    '
  95.    If PREF(4)=0
  96.       PARLE["Press",0] : Clear Key : Repeat : Until Inkey$<>"" or Mouse Key
  97.    Else 
  98.       Wait(100-10*DIFF)*(1-2*((ETAPE mod 2)=1))
  99.    End If 
  100.    Amal Off : BRUITB[100] : For B=1 To NB : Bob B,0,0, : Next 
  101.    '
  102.    BBUT(NBUT)=1+Rnd(NB-1) : Bob BBUT(NBUT),,,NOUVEAUB : Wait Vbl 
  103.    Restore "PLACES"+Str$(NB)-" " : S$=""
  104.    For I=1 To NB
  105.       Repeat : E=1+Rnd(NB-1) : Until Instr(S$,Str$(E))=0 : S$=S$+Str$(E)
  106.       Read H,V,CX,CY : H=H*52+290-DC : V=V*68-65
  107.       CUR(CX,CY,0)=H : CUR(CX,CY,1)=V : CUR(CX,CY,2)=0
  108.       HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  109.       Channel E To Bob E : Bob E,H0,V0, : Wait Vbl : Amal E,"M R0,R1,20"
  110.       Amreg(E,0)=H-H0 : Amreg(E,1)=V-V0 : Wait 5 : Amal On E : AJOUR
  111.       If I Bob(E)=NOUVEAUB
  112.          CUR(CX,CY,2)=BZN+1 : Rem Set Zone ZBUT(NBUT),H,V To H+51,V+42 
  113.       End If 
  114.       If I=1 Then CX0=CX : CY0=CY
  115.    Next 
  116.    While Chanmv(E) : Wend : INICURS[CX0,CY0] : PARLE["New",1]
  117. End Proc
  118. Procedure SURVI
  119.    NB=DIFF+1 : H0=560-DC : V0=270 : TIRE[0]
  120.    For B=1 To NB : TIRE[NBK] : Bob B,H0,V0,Param : Wait Vbl : Next 
  121.    '
  122.    ' La plage d'∩┐╜volution 
  123.    Amreg(0)=340-DC : Amreg(1)=570-DC : Amreg(2)=12 : Amreg(3)=167
  124.    P$="M R0,R1,30;Pause;"
  125.    P$=P$+"R: L R8=X-RA;L R8=Z(R8);L R6=0-R8;If Z(1)>0 J S;L R6=Z(RB-X);P;"
  126.    P$=P$+"S: L R9=Y-RC;L R9=Z(R9);L R7=0-R9;If Z(1)>0 J T;L R7=Z(RD-Y);P;"
  127.    AMP1$=P$+"T:;M R6,R7,30;P;Pause;J R"
  128.    Restore "PLACES"+Str$(NB)-" "
  129.    For B=1 To NB
  130.       Read H,V,CX,CY : H=(H*52)+290-DC : V=V*68-65
  131.       Channel B To Bob B : Bob B,H0,V0, : Wait Vbl 
  132.       Amal B,AMP1$ : Amreg(B,0)=H-H0 : Amreg(B,1)=V-V0
  133.       Wait 5 : Amal On B : AJOUR
  134.       If(ETAPE mod 2)=0
  135.          Wait ELTEMPS : Amal Off B : Bob B,0,0, : Wait Vbl 
  136.       End If 
  137.    Next 
  138.    If PREF(4)=0
  139.       PARLE["Press",0] : Repeat : Until(Mouse Key) or(Inkey$<>"")
  140.    Else 
  141.       Wait(100-10*DIFF)*(1-2*((ETAPE mod 2)=1))
  142.    End If 
  143.    Amal Off : BRUITB[100] : For B=1 To NB : Bob B,0,0, : Next : TEMPS[0]
  144.    '
  145.    BBUT(NBUT)=1+Rnd(NB-1) : SURVIB=I Bob(BBUT(NBUT))
  146.    For B=1 To NB : Rem Toutes images diff∩┐╜rentes sauf une 
  147.       If B<>BBUT(NBUT) Then TIRE[NBK] : Bob B,H0,V0,Param : Wait Vbl 
  148.    Next 
  149.    Wait 50
  150.    '
  151.    Restore "PLACES"+Str$(NB)-" " : S$=""
  152.    For I=1 To NB
  153.       Repeat : E=1+Rnd(NB-1) : Until Instr(S$,Str$(E))=0 : S$=S$+Str$(E)
  154.       Read H,V,CX,CY : H=(H*52)+290-DC : V=V*68-65
  155.       CUR(CX,CY,0)=H : CUR(CX,CY,1)=V : CUR(CX,CY,2)=0
  156.       HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  157.       Channel E To Bob E : Bob E,H0,V0, : Wait Vbl : Amal E,AMP2$
  158.       Amreg(E,0)=H-H0 : Amreg(E,1)=V-V0 : Wait 5 : Amal On E : AJOUR
  159.       If I Bob(E)=SURVIB
  160.          CUR(CX,CY,2)=BZN+1 : Rem Set Zone ZBUT(NBUT),H,V To H+51,V+42 
  161.       End If 
  162.       If I=1 Then CX0=CX : CY0=CY
  163.    Next 
  164.    While Chanmv(E) : Wend : INICURS[CX0,CY0] : PARLE["Same",1]
  165. End Proc
  166. Procedure ODRE
  167.    ALIGN3: Data 0,1,1,0,2,2,2,0,4,3,3,0
  168.    ALIGN4: Data 1,0,1,0,3,0,2,0,1,2,1,1,3,2,2,1
  169.    ALIGN5: Data 0,0,2,0,4,0,3,0,0,2,1,1,2,2,2,1,4,2,3,1
  170.    ALIGN6: Data 0,0,1,0,4,0,3,0,2,1,2,0,0,2,1,1,4,2,3,1,2,3,2,1
  171.    NB=Min(DIFF+2,6)
  172.    Restore "ALIGN"+Str$(NB)-" " : H0=540-DC : V0=270
  173.    ' Remplit les bobs  (le premier sera le gagnant) 
  174.    TIRE[0] : For B=1 To NB : TIRE[NBK] : ZBI(B)=Param : Next 
  175.    ' D∩┐╜termine les emplacements en rep∩┐╜rant celui du gagnant
  176.    TIRE[0] : For I=1 To NB
  177.       TIRE[NB] : B=Param
  178.       Read H,V,CX,CY : H(B)=(H*40)+340-DC : V(B)=V*38+10
  179.       CUR(CX,CY,0)=H(B) : CUR(CX,CY,1)=V(B) : CUR(CX,CY,2)=0
  180.       HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  181.       If B=1 Then CUR(CX,CY,2)=BZN+1
  182.       If I=1 Then CX0=CX : CY0=CY
  183.    Next 
  184.    ' ... et lance 
  185.    A$="M R0,R1,20" : For B=1 To NB
  186.       Channel B To Bob B : Bob B,H0,V0,ZBI(B) : Wait Vbl 
  187.       Amal B,A$ : Amreg(B,0)=H(B)-H0 : Amreg(B,1)=V(B)-V0 : Amal On B
  188.       AJOUR
  189.       If ETAPE mod 2=0
  190.          Wait ELTEMPS : Amal Off B : Bob B,H0,V0, : Wait Vbl 
  191.       End If 
  192.    Next 
  193.    '
  194.    If PREF(4)=0
  195.       PARLE["Press",0] : Repeat : Until(Mouse Key) or(Inkey$<>"")
  196.    Else 
  197.       Wait(100-10*DIFF)*(1-2*((ETAPE mod 2)=1))
  198.    End If 
  199.    Amal Off : BRUITB[100]
  200.    For B=1 To NB : Bob B,H0,V0, : Wait Vbl : Next : TEMPS[0]
  201.    '
  202.    ' Epargne le premier et cycle les autres 
  203.    For B=2 To NB-1 : Swap ZBI(B),ZBI(B+1) : Next 
  204.    ' Et relance tout
  205.    For B=1 To NB
  206.       Channel B To Bob B : Bob B,H0,V0,ZBI(B) : Wait Vbl 
  207.       Amal B,A$ : Amreg(B,0)=H(B)-H0 : Amreg(B,1)=V(B)-V0 : Amal On B
  208.       AJOUR
  209.    Next 
  210.    While Chanmv(NB) : Wend : PARLE["Place",1] : INICURS[CX0,CY0]
  211. End Proc
  212. Procedure PAIR
  213.    NB=Min(2*(DIFF+2),12) : H0=560-DC : V0=270
  214.    BBUT1=1 : BBUT2=2 : Rem Choisit les buts futurs
  215.    ' Remplit les bobs  (le premier couple sera le gagnant)
  216.    TIRE[0] : For B=1 To NB : TIRE[NBK] : ZBI(B)=Param : Next 
  217.    '
  218.    ' D∩┐╜termine les emplacements 
  219.    Restore "PLACES"+Str$(NB/2)-" " : For I=1 To NB/2
  220.       Read H,V,CX,CY : H=H*52+290-DC : V=V*68-65
  221.       CUR(CX,CY,0)=H : CUR(CX,CY,1)=V : CUR(CX,CY,2)=0
  222.       HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  223.       H(I)=H : V(I)=V
  224.       If I=1 Then CX0=CX : CY0=CY
  225.    Next 
  226.    '
  227.    ' Amreg(0)=340-dc : Amreg(1)=570-dc : Amreg(2)=12 : Amreg(3)=167 
  228.    P$="M R0,R1,30;Pause;"
  229.    P$=P$+"R: L R8=X-R2;L R8=Z(R8);L R6=0-R8;If Z(1)>0 J S;L R6=Z(R3-X);"
  230.    P$=P$+"S: L R9=Y-R4;L R9=Z(R9);L R7=0-R9;If Z(1)>0 J T;L R7=Z(R5-Y);"
  231.    P$=P$+"T:;M R6,R7,20;P;Pause;J R"
  232.    ' Distribue et anime 
  233.    TIRE[0] : B=0 : For I=1 To NB/2 : TIRE[NB/2] : H=H(Param) : V=V(Param)
  234.       For J=1 To 2 : H=H+(J-1)*15 : V=V+(J-1)*15 : Inc B
  235.          Channel B To Bob B : Bob B,H0,V0,ZBI(B) : Wait Vbl 
  236.          Amal B,P$ : Amreg(B,2)=H-5 : Amreg(B,3)=H+5
  237.          Amreg(B,4)=V-5 : Amreg(B,5)=V+5
  238.          Amreg(B,0)=H-H0 : Amreg(B,1)=V-V0 : Wait 5 : Amal On B : AJOUR
  239.          If(ETAPE mod 2=0) and(J=2)
  240.             Wait 100 : Amal Off B : Wait Vbl : Bob B,0,0, : Wait Vbl 
  241.             Amal Off B-1 : Wait Vbl : Bob B-1,0,0, : Wait Vbl 
  242.          End If 
  243.       Next 
  244.    Next 
  245.    '
  246.    If PREF(4)=0
  247.       PARLE["Press",0] : Repeat : Until(Mouse Key) or(Inkey$<>"")
  248.    Else 
  249.       Wait(100-10*DIFF)*(1-2*((ETAPE mod 2)=1))
  250.    End If 
  251.    '
  252.    T=Timer+50 : BASCULE=True
  253.    Do 
  254.       If Timer>T : T=Timer+50+Rnd(100) : Bob Update Off 
  255.          If BASCULE
  256.             Priority Reverse On : AJOUR : BASCULE=False
  257.          Else Priority Reverse Off : AJOUR : BASCULE=True
  258.          End If : Bob Update On 
  259.       End If 
  260.       If PREF(4)=0
  261.          Exit If(Mouse Key) or(Inkey$<>"")
  262.       Else Exit If Timer>T2
  263.       End If 
  264.    Loop 
  265.    TEMPS[0] : Priority Reverse Off 
  266.    BRUITB[100] : Amal Off : For B=1 To NB : Bob B,,,NBK+16 : Next : Wait Vbl 
  267.    Update : Bob Update Off : Wait Vbl 
  268.    '
  269.    ' Cycle les aspects des bobs, au-del∩┐╜ des deux premiers  
  270.    For B=3 To NB-1 : Swap ZBI(B),ZBI(B+1) : Next 
  271.    ' Replace tout, non sans rep∩┐╜rer le couple gagnant 
  272.    '
  273.    'Amreg(0)=340 : Amreg(1)=570 : Amreg(2)=12 : Amreg(3)=167
  274.    P$=P$+"R: L R8=X-R2;L R8=Z(R8);L R6=0-R8;If Z(1)>0 J S;L R6=Z(R3-X);"
  275.    P$=P$+"S: L R9=Y-R4;L R9=Z(R9);L R7=0-R9;If Z(1)>0 J T;L R7=Z(R5-Y);"
  276.    P$=P$+"T:;M R6,R7,20;P;Pause;J R"
  277.    TIRE[0] : B=0 : For I=1 To NB/2 : TIRE[NB/2] : N=Param : H=H(N) : V=V(N)
  278.       If I=1
  279.          Restore "PLACES"+Str$(NB/2)-" "
  280.          For K=1 To N : Read R,S,CX,CY : Next 
  281.       End If : CUR(CX,CY,2)=BZN+1
  282.       For J=1 To 2 : H=H+(J-1)*15 : V=V+(J-1)*15 : Inc B
  283.          Channel B To Bob B : Bob B,H,V,ZBI(B) : Wait Vbl 
  284.          Amal B,AMP3$ : Amreg(B,2)=H-5 : Amreg(B,3)=H+5
  285.          Amreg(B,4)=V-5 : Amreg(B,5)=V+5 : Amal On B : AJOUR
  286.       Next 
  287.    Next : Wait 50
  288.    Update : Bob Update On 
  289.    PARLE["Pair",1] : INICURS[CX0,CY0]
  290. End Proc
  291. '
  292. Procedure TIREBANK
  293.    Amal Off : Bob Off : AJOUR : CLOCK[280,60]
  294.    BBASE: Data "F.Planetes","M.chiens","M.chats","F.Number1"
  295.    Data "B.champignons","B.Mexic","A.poissons","M.Yeux","M.Bouches"
  296.    Data "A.fleurs","A.eventail","A.feuilles","A.montres","M.masque"
  297.    Data "B.Japideo1","F.Formes1","F.Reflex2","K.Japan","A.picasso"
  298.    Data "M.monstres2","B.insect"
  299.    Repeat 
  300.       N=1+Rnd(20) : Restore BBASE : For X=1 To N : Read B$ : Next 
  301.    Until Exist("BanqueB/"+B$+".abk")
  302.    Erase 1 : Load "BanqueB/"+B$+".abk" : NBK=Length(1)
  303.    Load "BanqueB/BoulesC.abk",1 : Hide On 
  304. End Proc
  305. Procedure MONOCUR
  306.    TREN=Timer+VITESSE
  307.    Do 
  308.       CURSEUR[1] : Exit If PTS<1
  309.       If BOUTONB Then MZ=1
  310.       If MZ=1 Then CLIQUE[13] : PTS=0 : Exit : Rem Puis destroytout 
  311.       If MZ=2 Then CLIQUE[14] : PARLE[DERANN$,1] : INICURS[CX,CY]
  312.       If MZ=3 Then CLIQUE[15] : PTS=0 : ABANDON=True : Exit 
  313.       Exit If PTS<1
  314.       If MZ=BZN+1 Then BRUITB[1] : Wait 100 : Exit 
  315.       If MZ=2
  316.          CLIQUE[14] : PARLE[DERANN$,1] : INICURS[CX,CY]
  317.       Else 
  318.          T=TSAB-Timer : Dec PTS : METPOINTS : DESTROYPT : Exit If PTS<1
  319.          If DIFF>1 : Dec PTS : METPOINTS : DESTROYPT : Exit If PTS<1 : End If 
  320.          If DIFF>3 : Dec PTS : METPOINTS : DESTROYPT : Exit If PTS<1 : End If 
  321.          TSAB=T+Timer : While Mouse Key : Wend 
  322.       End If 
  323.    Loop 
  324. End Proc
  325. Procedure ALEAMUS[S]
  326.    If S=0 Then FAITMUSE=0 : Pop Proc
  327.    'D0$=Dir$ : Dir$=D0$+"MRsons/cloches/" 
  328.    'Dir$="giguna:gamos/MRsons/cloches/" 
  329.    'F$(1)=Dir$+Left$(Dir First$(Dir$),20)-" " : NB=1
  330.    'For N=2 To 20 
  331.    '   F$(N)=Dir$+Left$(Dir Next$,20)-" " : Exit If F$(N)=Dir$
  332.    '   Inc NB 
  333.    'Next  
  334.    'Dir$=D0$  
  335.    FAITMUSE=1 : Add DIT,150
  336. End Proc
  337. Procedure MUSE
  338.    If PREF(5)=1 Then Pop Proc
  339.    If FAITMUSE=0 Then Pop Proc
  340.    Data 196,207.65,220,233.08,246.94
  341.    Data 261.63,277.18,293.66,311.13,329.63,349.23,370,392,415.3
  342.    Data 440,466.16,493.88,523.25
  343.    N=1+Rnd(16) : Restore : For X=1 To N : Read F : Next : F=20000/392*F
  344.    'Repeat : A$=F$(1+Rnd(NB-1)) : Until A$<>F$(0) 
  345.    A$="mrsons/cloches/"+Str$(1+Rnd(11))-" "
  346.    Open In 1,A$
  347.    'Bell 60 : Wait Key  
  348.    L=Lof(1) : Close 1 : F$(0)=A$
  349.    Bload A$,Start(6) : DIT=Timer+50*L/F+Rnd(60)
  350.    VOIX=Rnd(1)+4*Rnd(1) : PEDALE=50+Rnd(13)
  351.    Volume VOIX,PEDALE : Sam Raw VOIX,Start(6)+104,L,F
  352. End Proc
  353. '
  354. '
  355. '                          PROCEDURES GENERALES  
  356. '
  357. Procedure INITEST
  358.    DC=0 : Rem nouvelles coordonn∩┐╜es / petit ∩┐╜cran
  359.    If Screen=7 : PRENDVAR
  360.    Else Load Iff "decors/"+Mid$(TEST$,1,2),0 : Double Buffer 
  361.    LANGUE$="Ang" : PREF(1)=1 : PREF(3)=2 : End If 
  362.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  363.    Hide On : Limit Mouse : MXETAPE=40 : CYCLETAPE=8 : GAUCHE=True : Curs Off 
  364.    XB(0)=280 : YB(0)=46 : Rem Suite
  365.    XB(1)=295 : YB(1)=63 : Rem Help 
  366.    XB(2)=278 : YB(2)=79 : Rem Encore 
  367.    BCUR=63 : Rem N∩┐╜ de bob du curseur 
  368.    XP=282 : YP=4 : APTS=0 : BBOULE=15 : Rem bob des points sur le boulier
  369.    XC=253 : YC=177 : Rem compteur d'∩┐╜tapes
  370.    XT=209 : YT=24 : Rem compteur du total
  371.    BOULBK=1 : CRSBK=2 : FLCHBK=3 : CERVBK=4 : BASEBLOCK=4 : Rem Blocks de base 
  372.    BZN=8
  373.    For X=1 To 15 : Erase X : Next 
  374.    Erase 7 : Reserve As Chip Work 7,7520 : Load "MRbruits/Brt0.sbk",7
  375.    '
  376.    BANQBI["",""]
  377.    '
  378.    Reserve Zone 35 : Limit Mouse 
  379.    ETAPE=0 : QST=ETAPE : DIFF=1 : ELTEMPS=100
  380.    '
  381.    ' Boulier des points par ∩┐╜cran    (Block BOULBK pour toutes les boules)    
  382.    Get Block BOULBK,25+XP-DC,5+YP,10,10,1
  383.    '
  384.    ' Compteur d'∩┐╜tapes     (Block CRSBK pour le curseur, initialis∩┐╜ ici)  
  385.    HCURS=XC-DC : VCURS=YC-3*ETAPE : Get Block CRSBK,HCURS,VCURS,22,17,1
  386.    Paste Icon HCURS,VCURS,12
  387.    '
  388.    ' Fl∩┐╜ches  (block FLCHBK, actualis∩┐╜ chaque fois) 
  389.    'For I=0 To 2 : Set Zone I+1,XB(I)+7-DC,YB(I)+7 To XB(I)+19-DC,YB(I)+19
  390.    'Next  
  391.    '
  392.    ' Difficult∩┐╜ (Block CERVBK actualis∩┐╜ chaque fois, initialis∩┐╜ ici)
  393.    AZDIF: Data 284,172,311,183
  394.    Data 285,161,314,172
  395.    Data 284,149,317,161
  396.    Data 285,133,321,149
  397.    Data 285,113,326,133
  398.    Restore AZDIF : Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
  399.    Get Block CERVBK,H,V,H1-H,V1-V,1 : DIFF[0,DIFF]
  400.    Restore AZDIF
  401.    'For Y=4 To 8 : Read H,V,H1,V1 : Set Zone Y,H,V To H1,V1 : Next  
  402.    '
  403.    ' Plage de travail (Block 1, de type "c")
  404.    'Get Cblock 1,334,0,300,290
  405.    Get Cblock 1,0,0,8,2
  406.    TEMPS[0] : PARLE["Start",2]
  407. End Proc
  408. Procedure PAUSEPOINTS
  409.    BZDIF: Data 284,172,311,183,285,161,314,172,284,149,317,161
  410.    Data 285,133,321,149,285,113,326,133
  411.    ALEAMUS[1] : A=0 : CX=1 : CY=0
  412.    If(PREF(4)=0) or(ETAPE<1)
  413.       Repeat 
  414.          VIDCUR[0]
  415.          For I=0 To 2
  416.             CUR(1,I,0)=XB(I)-DC : CUR(1,I,1)=YB(I) : CUR(1,I,2)=I+1
  417.          Next 
  418.          Restore BZDIF : For Y=4 To 8
  419.             Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
  420.          CUR(1,11-Y,0)=H : CUR(1,11-Y,1)=V : CUR(1,Y-1,2)=12-Y : Next 
  421.          CUR(0,2,0)=194-DC : CUR(0,2,1)=85 : CUR(0,2,2)=9
  422.          INICURS[CX,CY] : HCR=1 : VCR=7
  423.          CURSEUR[0] : A=Param : If BOUTONB : MZ=3 : End If 
  424.          If(A=27) or(MZ=2) : Rem pr∩┐╜sentations
  425.             ALEAMUS[0]
  426.             If MZ=2 : CLIQUE[14] : CX=1 : CY=1 : INICURS[CX,CY] : End If 
  427.             DEPLACE: Data 1,0,1,1,1,2,0,2,1,2,1,1,1,0,1,1,1,2,1,3
  428.             Bob BCUR,CUR(1,0,0),CUR(1,0,1), : Wait Vbl : PARLE["Arrows",2]
  429.             Restore DEPLACE : For X=1 To 10
  430.                Read H,V
  431.                BRUITB[3] : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl 
  432.                TEMPS=Timer+50
  433.                Repeat : K1=Mouse Key : Until Timer>TEMPS or K1>0
  434.                Exit If K1
  435.             Next 
  436.             If K1<1
  437.                PRESENTE: Data 1,0,"Advance",1,1,"Help",1,2,"Main"
  438.                Data 0,2,"Preferences"
  439.                Wait 50 : PARLE["select",2] : Wait 250 : Restore PRESENTE
  440.                For X=1 To 4
  441.                   Read H,V,A$ : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl 
  442.                   PARLE[A$,2]
  443.                   T=Timer+250 : Repeat : K2=Mouse Key : Until Timer>T or K2>0
  444.                   Exit If K2
  445.                Next 
  446.                If K2<1
  447.                   PARLE["Level",2] : Rem Amal Off 15 : Wait Vbl 
  448.                   For X=1 To 5 : Bob BCUR,CUR(1,8-X,0),CUR(1,8-X,1), : Wait Vbl 
  449.                      T=Timer+50
  450.                      Repeat : K3=Mouse Key : Until Timer>T or K3>0
  451.                      Exit If K3
  452.                      Bob BCUR,,,NBK+16 : Wait Vbl : Rem AJOUR : DIFF[X]
  453.                      'Bob BCUR,,,NBK+17 : Wait Vbl : Wait 40
  454.                   Next 
  455.                   If K3<1
  456.                      T=Timer+100
  457.                      Repeat : K=Mouse Key : Until Timer>T or K>0
  458.                   End If 
  459.                End If 
  460.                'DIFF[1] 
  461.             End If 
  462.             MZ=0 : INICURS[1,0] : ALEAMUS[1] : Wait 50
  463.          End If 
  464.          If A=43
  465.             ETAPE=Min(39,ETAPE+1) : ETAPE[ETAPE] : Inc QST : MZ=0
  466.          End If 
  467.          If A=45
  468.             ETAPE=Max(0,ETAPE-1) : ETAPE[ETAPE] : QST=Max(0,QST-1) : MZ=0
  469.          End If 
  470.          If 3<MZ and MZ<9
  471.             BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : AJOUR : DIFF[DIFF,MZ-3]
  472.          End If 
  473.          If MZ=9 : ALEAMUS[0] : BRUITB[50]
  474.             P=1 : If Screen=3 : P=2 : End If : PREFERENCES[P] : ALEAMUS[1]
  475.             MZ=0
  476.          End If 
  477.       Until(MZ=1) or(MZ=3) or BOUTONB
  478.    Else 
  479.       MZ=1
  480.    End If : ALEAMUS[0]
  481.    Wait 1+50*PREF(4) : Rem If(PREF(4)=1) and(ETAPE>0) Then MZ=1 
  482.    If MZ=1
  483.       ALEAMUS[0] : DIT=0
  484.       CLIQUE[13] : Inc ETAPE : Inc QST
  485.       If QST>CYCLETAPE
  486.          A=DIFF : QST=1 : DIFF=Min(DIFF+1,5) : DIFF[A,DIFF]
  487.       End If 
  488.       ETAPE[ETAPE] : TEMPS[0]
  489.    End If 
  490.    If(MZ=3) or BOUTONB Then CLIQUE[15]
  491.    Amal Off 15 : Bob Off BCUR : Bob Clear : AJOUR
  492. End Proc[MZ]
  493. Procedure INICURS[CX,CY]
  494.    Limit Mouse 
  495.    If Chanan(15) Then Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1), : Pop Proc
  496.    Channel 15 To Bob BCUR : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),NBK+17
  497.    Wait Vbl : Amal 15,"A 0,(R1,46)(R2,4)"
  498.    Amreg(15,1)=NBK+17 : Amreg(15,2)=NBK+18 : Amal On 15 : Clear Key 
  499. End Proc
  500. Procedure CURSEUR[C]
  501.    BOUTONA=False : BOUTONB=False : BOUTONS=False
  502.    Clear Key 
  503.    Repeat 
  504.       Repeat : T1=Timer+50
  505.          Repeat 
  506.             X=X Mouse : Y=Y Mouse : Wait 3 : U=X Mouse : V=Y Mouse
  507.          Until X=U and Y=V
  508.          X Mouse=150 : Y Mouse=100 : MX0=X Mouse : MY0=Y Mouse : DM=0
  509.          Repeat 
  510.             If Timer>DIT Then MUSE
  511.             If C=1 : Rem En cours de question 
  512.                If Timer>TSAB : TEMPS[1] : TSAB=Timer+49 : End If 
  513.                If(PTS<1) or(DUREE<1) : MZ=0 : Exit 3 : End If 
  514.                If Timer>TREN : A=0 : Exit 3 : End If 
  515.             End If 
  516.             If C=2 : Rem En menu principal
  517.                If Timer>T1
  518.                   Restore "ETOILE"
  519.                   For X=1 To 1+Rnd(21) : Read A,B : Next 
  520.                   Bob 3,A,B, : Wait Vbl 
  521.                   T2=Timer+10+Rnd(20) : T1=T2+200
  522.                End If 
  523.                If Timer>T2
  524.                   Bob 3,-20,, : T1=Timer+50+50*Rnd(2) : T2=T1+200
  525.                End If 
  526.             End If 
  527.             MX=X Mouse : MY=Y Mouse : A$=Inkey$
  528.          Until A$<>"" or Mouse Key or Abs(MX0-MX)>DM or Abs(MY0-MY)>DM
  529.          K=Mouse Key : R=Asc(A$)
  530.          A=-28*(MX-MX0>DM)-29*(MX0-MX>DM)-30*(MY0-MY>DM)-31*(MY-MY0>DM)
  531.          If(R>27) and(R<32) Then A=R
  532.          X=CX : Y=CY
  533.          If(A=28) Then Add X,1
  534.          If(A=29) Then Add X,-1
  535.          If(A=30) Then Add Y,-1
  536.          If(A=31) Then Add Y,1
  537.       Until((X<0)+(Y<0)+(X>HCR)+(Y>VCR)=0)
  538.       If(X<>CX) or(Y<>CY)
  539.          If(CUR(X,Y,0)=0) and(CUR(X,Y,1)=0)
  540.             If(A=28) or(A=29)
  541.                Repeat : Add Y,-1,0 To VCR
  542.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  543.             End If 
  544.             If(A=30) or(A=31)
  545.                Repeat : Add X,1,0 To HCR
  546.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  547.             End If 
  548.          End If 
  549.          BRUITB[3] : CX=X : CY=Y : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),
  550.          Exit If C=2
  551.       End If 
  552.    Until(K>0)+(R=43)+(R=45)+(R=27)+(R=13)
  553.    MZ=CUR(CX,CY,2)
  554.    BOUTONS=(K>0)+(R=13) : BOUTONA=(K=1)+(K=3)+(R=13) : BOUTONB=(K>1)
  555. End Proc[R]
  556. Procedure VIDCUR[A]
  557.    For X=0 To 12 : For Y=0 To 9 : For Z=0 To 2 : CUR(X,Y,Z)=0
  558.    Next : Next : Next 
  559.    If A=1 : Rem situe les trois fl∩┐╜ches
  560.       For I=0 To 2 : CUR(0,I,0)=XB(I)-DC : CUR(0,I,1)=YB(I)
  561.       CUR(0,I,2)=I+1 : Next 
  562.       HCR=1 : VCR=2
  563.    End If 
  564. End Proc
  565. Procedure PARLE[A$,T]
  566.    If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
  567.    If PREF(1)<1 Then Pop Proc
  568.    While Timer<DIT : Wend 
  569.    Volume %101,63 : DERANN$=A$
  570.    T$=TEST$ : If T=2 Then T$="General"
  571.    SEX$=Mid$("FM",1+Rnd(1),1) : If Instr("JapIta",LANGUE$) Then SEX$="F"
  572.    F$="Paroles/"+T$+"/"+LANGUE$+SEX$+"/"+A$
  573.    If Not Exist(F$) Then Pop Proc
  574.    Open In 1,F$ : L=Lof(1) : Close 1
  575.    If L>$FFFF Then Pop Proc
  576.    S6=Start(6) : Bload F$,S6 : Volume %101,63 : Sam Raw %101,104+S6,L,20000
  577.    DIT=Timer+(L/400)+20
  578.    If Exist(F$+Chr$(50))
  579.       While Timer<DIT : Wend : F$=F$+Chr$(50)
  580.       Open In 1,F$ : L=Lof(1) : Close 1
  581.       If L>64000 : Pop Proc : End If 
  582.       Bload F$,S6 : Sam Raw %101,104+S6,L,20000
  583.       DIT=Timer+(L/400)+20
  584.    End If 
  585.    If T=1 Then While Timer<DIT : Wend 
  586. End Proc
  587. Procedure BRUIT[F,V,A$]
  588.    If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
  589.    If PREF(2) Then Pop Proc
  590.    While Timer<DIT : Wend 
  591.    S=20000 : If F<>0 Then S=1000*F
  592.    If L>65430 Then Pop Proc
  593.    Open In 1,"MRbruits/"+A$ : L=Lof(1) : Close 1
  594.    Bload "MRbruits/"+A$,Start(6)
  595.    Volume %1010,63 : If V<>0 Then Volume %1010,V
  596.    Sam Raw %1010,Start(6)+104,L,S : DIT=Timer+L/400
  597. End Proc
  598. Procedure BRUITB[N]
  599.    F=20000 : If N=100 Then N=3 : F=30000
  600.    If N=50 Then N=3 : F=10000
  601.    S0=Start(7) : S=Leek(S0+8*N) : L=Leek(S0+8*N+4)
  602.    Volume %1010,63 : Sam Raw %1010,S+S0+105,L-105,F : DIT7=Timer+L/400
  603. End Proc
  604. Procedure TEMPS[T]
  605.    ' Mettre sur la voix 
  606. If T=0 : TEMPS=DIFF-1 : Else BRUITB[2] : End If 
  607.    Inc TEMPS
  608.    If TEMPS>10
  609.       Dec PTS : METPOINTS : DESTROYPT : Dec DUREE
  610.       If(DUREE<1) or(PTS<1) : Pop Proc : End If 
  611.       TEMPS=DIFF
  612.    End If 
  613.    Paste Icon 578-DC,5,TEMPS+15 : Wait Vbl 
  614. End Proc
  615. Procedure CLIQUE[I]
  616.    Amal Off 1 : Bob Off BCUR : Bob Clear : AJOUR
  617.    BRUITB[50] : H=XB(I-13)-DC : V=YB(I-13)
  618.    Get Block FLCHBK,H,V,40,40,1 : Paste Icon H,V,I : While Mouse Key : Wend 
  619.    ABLOC[FLCHBK]
  620. End Proc
  621. Procedure AIDE
  622. End Proc
  623. Procedure ETAPE[ETAPE]
  624.    Update : Update Off : Wait Vbl 
  625.    Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl 
  626.    Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl 
  627.    Update On 
  628.    HCURS=XC-DC : VCURS=YC-3*ETAPE
  629.    Get Block CRSBK,HCURS,VCURS,22,17,1 : Paste Icon HCURS,VCURS,12
  630. End Proc
  631. Procedure DIFF[I1,I2]
  632.    ZD1: Data 284,172,311,183
  633.    ZD2: Data 285,161,314,172
  634.    ZD3: Data 284,149,317,161
  635.    ZD4: Data 285,133,321,149
  636.    ZD5: Data 285,113,326,133
  637.    If I1>0
  638.       Restore "ZD"+Str$(I1)-" " : Read H : Add H,-DC
  639.       Update : Update Off : Wait Vbl 
  640.       Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl 
  641.       Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl 
  642.       Update On 
  643.    End If 
  644.    I=Min(I2,5) : Restore "ZD"+Str$(I)-" " : Read H,V,H1,V1
  645.    Add H,-DC : Add H1,-DC
  646.    Get Block CERVBK,H,V,H1-H,V1-V,1 : Paste Icon H,V,6+I
  647.    DIFF=I
  648. End Proc
  649. Procedure FAITTOTAL
  650.    I=PTS : B=BBOULE
  651.    PT1: Data 25,5
  652.    PT2: Data 14,5
  653.    PT3: Data 3,5
  654.    PT4: Data 25,16
  655.    PT5: Data 14,16
  656.    PT6: Data 3,16
  657.    PT7: Data 25,27
  658.    PT8: Data 14,27
  659.    PT9: Data 3,27
  660.    If PTS>0
  661.       Amal Off : Bob Off : AJOUR
  662.       A$="A 1,(R2,7)(R3,1)(R4,1);M R0,0,5;M 0,R1,3;M -4,0,4"
  663.       For X=I To 1 Step -1
  664.          Dec PTS : METPOINTS : Inc TPTS(TEST)
  665.          Restore "PT"+Str$(PTS+1)-" " : Read H,V : H=XP+H-DC : V=YP+V
  666.          Dec B : Channel B To Bob B : Bob B,H,V,NBK+1 : Wait Vbl 
  667.          Amal B,A$
  668.          Amreg(B,0)=XT+55-H-DC : Amreg(B,1)=YT+4-V : Amreg(B,2)=NBK+1
  669.          Amreg(B,3)=NBK+15 : Amreg(B,4)=NBK+16
  670.          Amal On B
  671.          If X=I : Sam Loop On : BRUIT[0,0,"Bobloc"] : End If 
  672.          METTOTAL["+",TPTS(TEST),XT,YT] : Wait Vbl 
  673.       Next 
  674.       While Chanmv(B) : Wend 
  675.       Bob Off : Bob Clear : Sam Loop Off 
  676.    End If 
  677. End Proc
  678. Procedure METTOTAL[D$,N,X0,Y0]
  679.    If D$="+" or N>0
  680.       U=N mod 10 : N=(N-U)/10
  681.       If N>0
  682.          D=N mod 10 : N=(N-D)/10
  683.          If N>0
  684.             C=N mod 10
  685.          End If 
  686.       End If 
  687.       Paste Icon X0-DC,Y0,27+C : Wait Vbl 
  688.       Paste Icon X0+13-DC,Y0,27+D : Wait Vbl 
  689.       Paste Icon X0+26-DC,Y0,27+U : Wait Vbl 
  690.    Else 
  691.       Paste Icon X0,Y0,26
  692.       Paste Icon X0+13,Y0,26
  693.       Paste Icon X0+26,Y0,26 : Paste Icon X0+26,Y0,26
  694.    End If 
  695. End Proc
  696. Procedure METPOINTS
  697.    APT1: Data 25,5
  698.    APT2: Data 14,5
  699.    APT3: Data 3,5
  700.    APT4: Data 25,16
  701.    APT5: Data 14,16
  702.    APT6: Data 3,16
  703.    APT7: Data 25,27
  704.    APT8: Data 14,27
  705.    APT9: Data 3,27
  706.    If PTS<0 Then APTS=0 : Pop Proc
  707.    If PTS>APTS
  708.       For X=Max(1,APTS+1) To PTS
  709.          Restore "APT"+Str$(X)-" " : Read H,V : Paste Icon XP+H-DC,YP+V,1
  710.       Next 
  711.    Else 
  712.       For X=APTS To Max(PTS+1,1) Step -1
  713.          Restore "APT"+Str$(X)-" "
  714.          Read H,V : H=XP+H-DC : V=YP+V : AUTOBLOC[BOULBK,H,V]
  715.       Next 
  716.    End If 
  717.    APTS=PTS
  718. End Proc
  719. Procedure DESTROYPT
  720.    If PTS<0 Then Pop Proc
  721.    While FERMEDES : Wend 
  722.    FERMEDES=True
  723.    BPT1: Data 25,5
  724.    BPT2: Data 14,5
  725.    BPT3: Data 3,5
  726.    BPT4: Data 25,16
  727.    BPT5: Data 14,16
  728.    BPT6: Data 3,16
  729.    BPT7: Data 25,27
  730.    BPT8: Data 14,27
  731.    BPT9: Data 3,27
  732.    BRUITB[4] : Restore "BPT"+Str$(PTS+1)-" " : Read H,V
  733.    B=BBOULE-1 : Dec BBOULE : If BBOULE=12 Then BBOULE=15
  734.    BL=B+20
  735.    DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R2,1)"
  736.    DSP$=DSP$+";M 0,100,62"
  737.    Channel B To Bob BL : Bob BL,XP+H-DC,YP+V,NBK+3 : Wait Vbl : Amal B,DSP$
  738.    Amreg(B,0)=10 : Amreg(B,1)=NBK+3 : Amreg(B,2)=NBK+16 : Amal On B
  739.    FERMEDES=False
  740.    'While Chanmv(B) or Chanan(B) : Wend 
  741. End Proc
  742. Procedure DESTROYTOUT
  743.    Data 25,5,14,5,3,5,25,16,14,16,3,16,25,27,14,27,3,27
  744.    If APTS<1 Then Pop Proc
  745.    BRUIT[0,0,"perdu!"] : Bob Off : Bob Clear : Amal Off 
  746.    Restore : For P=1 To APTS : Read H,V
  747.    H(P)=XP+H-DC : V(P)=YP+V : AUTOBLOC[BOULBK,H(P),V(P)] : Next 
  748.    For P=1 To APTS : Bob P,H(P),V(P),NBK+3 : Wait Vbl : Next 
  749.    DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R1+13,1)"
  750.    DSP$=DSP$+";M 0,100,62"
  751.    For P=APTS To 1 Step -1
  752.       Channel P To Bob P : Bob P,H(P),V(P), : Wait Vbl 
  753.       Amal P,DSP$ : Amreg(P,0)=10 : Amreg(P,1)=NBK+3 : Amal On P
  754.    Next 
  755.    While Chanmv(1) or Chanan(1) : Wend : Wait Vbl : Wait 25
  756.    APTS=0 : PTS=0
  757. End Proc
  758. Procedure DROITE[E,D]
  759.    If Not(GAUCHE) Then Pop Proc
  760.    Amal Off : Wait Vbl 
  761.    Channel 1 To Screen Offset E : Screen E : Screen To Front E
  762.    Amal 1,"M 20,0,5;M R0,0,R1;M 20,0,5"
  763.    Amreg(1,0)=D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
  764.    Amal On 1 : While Chanmv(1) : Wend : GAUCHE=False
  765. End Proc
  766. Procedure GAUCHE[E,D]
  767.    If GAUCHE Then Pop Proc
  768.    Amal Off : Wait Vbl : Channel 1 To Screen Offset E : Screen E
  769.    Amal 1,"M -20,0,5 ;M R0,0,R1;M -20,0,5"
  770.    Amreg(1,0)=-D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
  771.    Amal On 1 : While Chanmv(1) : Wend : GAUCHE=True
  772. End Proc
  773. Procedure DIAPHRAGME[A,B]
  774.    ' montre la moiti∩┐╜ gauche de B arrivant en diaphragme sur A
  775.    Autoback 0 : Screen To Front A
  776.    For X=1 To 59 Step 2
  777.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  778.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  779.    Next 
  780.    For X=60 To 130 Step 10
  781.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  782.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  783.    Next 
  784.    For X=131 To 176 Step 20
  785.       H0=170-X : H1=170+X : V0=0 : V1=260
  786.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  787.    Next 
  788.    Screen To Front B : Screen B : Rem Screen Close A 
  789. End Proc
  790. Procedure CLOCK[X,Y]
  791.    Change Mouse 3 : X Mouse=X : Y Mouse=Y : Show On 
  792. End Proc
  793. Procedure PASSECRAN[A$,E,F,G]
  794.    Screen Open 2,360,270,64,Lowres : Flash Off 
  795.    Get Palette E : Screen To Front E
  796.    Screen Copy E,0,0,360,270 To 2,0,0 : Screen Close E
  797.    Load Iff A$,F : Flash Off : Get Palette 2
  798.    Screen To Front 2 : Screen F
  799.    If G=1 Then Screen Close 2 : Double Buffer 
  800. End Proc
  801. Procedure BANQBI[B$,I$]
  802.    CLOCK[280,60] : Amal Off : Bob Off : AJOUR : Erase 1 : Erase 2
  803.    If B$=""
  804.       NBK=0 : Load "BanqueB/BoulesC.abk"
  805.    Else 
  806.       Load "BanqueB/"+B$+".abk" : NBK=Length(1) : Load "BanqueB/BoulesC.abk",1
  807.    End If 
  808.    Load "BanqueI/Ftdb.abk" : NBI=Length(2)
  809.    If I$<>"" Then Load "BanqueI/"+I$+".abk",2
  810.    Make Icon Mask : Hide On 
  811. End Proc
  812. Procedure PREFERENCES[CHOIX]
  813.    PRFV: Data "voice","sounds","language","speed","music"
  814.    PRF1: Data 0,0,6,0,10,7,1,"voice"
  815.    PRF2: Data 1,0,69,0,73,7,2,"sounds"
  816.    PRF3: Data 1,1,37,15,41,21,3,"Language"
  817.    PRF4: Data 0,2,6,30,13,35,8,"speed"
  818.    PRF5: Data 1,2,69,30,74,35,9,"music"
  819.    DRAPEAUX: Data 3,4,6,0,11,5,0,0,0,0,0,0,7
  820.    DIALECTES: Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  821.    SUITE_D_OPTIONS: Data 2,3,4,5,6,13,4,4,4,4,4,4,1
  822.    CLOCK[300,150] : B$="A.PeTdbacc" : BANQBI[B$,""] : ZB=Length(1)+1 : TB=10
  823.    ECR=Screen : ZCR=4
  824.    Screen Open ZCR,112,66,64,Lowres : Flash Off 
  825.    Screen ZCR : Flash Off : Get Palette ECR : Cls 0
  826.    Screen To Front ECR : Screen ZCR : Paste Bob 0,0,TB : Wait Vbl 
  827.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  828.       Read A,B,C,D,E,F,Z
  829.       If X=3
  830.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  831.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  832.       Else 
  833.          If PREF(X) : Paste Bob E,F,Z : End If 
  834.       End If 
  835.    Next : Get Bob ZCR,ZB,0,0 To 111,63 : Screen ECR
  836.    PARLE["Choose",2] : Hide On 
  837.    If CHOIX=0 : H=40 : V=73
  838.       For Z=1 To 64 Step 2
  839.          ZZ=Min(2*Z,112) : Get Bob ZCR,ZB,0,0 To ZZ,Z : Bob 1,H,V,ZB : Wait Vbl 
  840.       Next 
  841.    Else 
  842.       Bob 1,400,10,ZB : Wait Vbl 
  843.       If CHOIX=1
  844.          Limit Bob 1,0,0 To 224,200
  845.          Channel 1 To Bob 1 : Bob 1,222,120, : Wait Vbl 
  846.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  847.          H=110 : V=120
  848.       Else 
  849.          Limit Bob 1,158,0 To 400,200
  850.          Channel 1 To Bob 1 : Bob 1,36,120, : Wait Vbl 
  851.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  852.          H=148 : V=120
  853.       End If 
  854.    End If 
  855.    VIDCUR[0]
  856.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  857.       Read A,B,C,D,E,F,Z : Add E,H : Add F,V
  858.       If X=3
  859.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  860.          If Z=0 : Z=NBK+16 : End If : Bob X+1,E,F,Z
  861.       Else 
  862.          If PREF(X)
  863.             Bob X+1,E,F,Z
  864.          Else 
  865.             Bob X+1,E,F,NBK+16
  866.          End If : Wait Vbl 
  867.       End If 
  868.    Next : Bob 1,,,TB : Wait Vbl 
  869.    '
  870.    '
  871.    VIDCUR[0] : K=0
  872.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  873.       Read A,B,C,D,E,F,Z,P$ : Add C,H : Add D,V
  874.       CUR(A,B,0)=C : CUR(A,B,1)=D : CUR(A,B,2)=X : Z(X)=Z
  875.       If K<1
  876.          Bob BCUR,CUR(A,B,0),CUR(A,B,1),NBK+17 : Wait Vbl : PARLE[P$,2]
  877.          TEMPS=Timer+50 : Repeat : K=Mouse Key : Until Timer>TEMPS or K>1
  878.       End If 
  879.    Next 
  880.    While Mouse Key : Wend 
  881.    HCR=1 : VCR=2 : INICURS[1,1] : L$=LANGUE$
  882.    Do 
  883.       CURSEUR[0] : If BOUTONB Then MZ=0 : BOUTONB=False
  884.       Exit If MZ=0 or Not(BOUTONS)
  885.       If MZ=3
  886.          Restore SUITE_D_OPTIONS : For X=1 To PREF(3) : Read PREF(3) : Next 
  887.          Restore DIALECTES : For X=1 To PREF(3) : Read LANGUE$ : Next 
  888.          Restore DRAPEAUX : For X=1 To PREF(3) : Read Z : Next 
  889.          If Z=0 : Z=NBK+16 : End If 
  890.          Bob MZ+1,,,Z : Wait Vbl 
  891.       Else 
  892.          If PREF(MZ)
  893.             Bob MZ+1,,,NBK+16 : PREF(MZ)=0
  894.          Else 
  895.             Bob MZ+1,,,Z(MZ) : PREF(MZ)=1
  896.          End If 
  897.       End If : Wait Vbl 
  898.       Restore PRFV : For X=1 To MZ : Read P$ : Next : PARLE[P$,2]
  899.       While Mouse Key : Wend 
  900.    Loop 
  901.    FINDEPREF:
  902.    AJOUR : BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : Wait Vbl 
  903.    CX=1 : CY=0
  904.    Screen ZCR : Paste Bob 0,0,TB
  905.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  906.       Read A,B,C,D,E,F,Z
  907.       If X=3
  908.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  909.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  910.       Else 
  911.          If PREF(X) : Paste Bob E,F,Z : End If 
  912.       End If 
  913.    Next 
  914.    Get Bob ZCR,ZB,0,0 To 111,64 : Screen ECR : Bob 1,,,ZB : Wait Vbl 
  915.    For X=2 To 6 : Bob X,,,NBK+16 : Next 
  916.    If CHOIX=0 : Screen ZCR
  917.       For Z=64 To 1 Step -4
  918.          ZZ=Min(2*Z,112)
  919.          Get Bob ZCR,ZB,0,0 To ZZ,Z : Screen ECR : Bob 1,40,73,ZB : Wait Vbl 
  920.       Next 
  921.       Bob 1,,,NBK+16 : Wait Vbl : Bob Off 1 : Wait Vbl 
  922.    Else 
  923.       Channel 1 To Bob 1 : Bob 1,,,Length(1) : Wait Vbl 
  924.       If CHOIX=1
  925.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  926.       Else 
  927.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  928.       End If 
  929.    End If : Screen Close ZCR
  930.    Limit Bob : Amal Off : Bob Off : AJOUR : CLOCK[300,150]
  931.    If L$<>LANGUE$
  932.       If CHOIX=0
  933.         A$="Decors/Entree"+LANGUE$ : PASSECRAN[A$,1,1,1]
  934.       End If 
  935.       If CHOIX=1
  936.          Load "banqueI/Titror"+LANGUE$+".ABK" : Paste Icon 20,48,TEST
  937.       End If 
  938.    End If 
  939.    BANQBI["",""]
  940. End Proc
  941. Procedure NETTOIE[BLK]
  942.    Update : Wait Vbl : Update Off 
  943.    Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl 
  944.    Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl 
  945.    Update On 
  946. End Proc
  947. Procedure AUTOBLOC[N,X,Y]
  948.    Update : Update Off : Wait Vbl 
  949.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  950.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  951.    Update On 
  952. End Proc
  953. Procedure ABLOC[N]
  954.    Update : Update Off : Wait Vbl 
  955.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  956.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  957.    Update On 
  958. End Proc
  959. Procedure AJOUR
  960.    Update : Wait Vbl : Update : Wait Vbl 
  961. End Proc
  962. Procedure TIRE[M]
  963.    If M=0 Then SA$="" : Pop Proc
  964.    ' Tire un nombre parmi M et nouveau dans SA$     
  965.    M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SA$,Str$(I)+" ")=0
  966.    SA$=SA$+Str$(I)+" "
  967. End Proc[I]
  968. Procedure TIRB[M]
  969.    If M=0 Then SB$="" : Pop Proc
  970.    ' Tire un nombre parmi M et nouveau dans SB$     
  971.    M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SB$,Str$(I)+" ")=0
  972.    SB$=SB$+Str$(I)+" "
  973. End Proc[I]
  974. Procedure AFFECTE[DEB,NOMB,IMAGE]
  975.    ' DEB : premier indice, NOMB : nombre total, premier compris 
  976.    ' IMAGE: l'image ∩┐╜ affecter
  977.    Repeat : N=DEB+Rnd(NOMB-1) : Until 0=ZBI(N) : ZBI(N)=IMAGE
  978. End Proc[N]
  979. Procedure VIDE
  980.    Update : Bob Update Off : Wait Vbl 
  981.    For N=1 To NB : Bob N,H(N),V(N),NBK+16 : Wait Vbl : Next 
  982.    Update : Bob Update On 
  983. End Proc
  984. Procedure PLACE
  985.    Update : Bob Update Off : Wait Vbl 
  986.    For N=1 To NB : Bob N,H(N),V(N),ZBI(N) : Wait Vbl : Next 
  987.    Update : Bob Update On 
  988. End Proc
  989. Procedure VOISTEST
  990.    If(ETAPE>1) and(Screen=3)
  991.       DROITE[3,45]
  992.    Else 
  993.       TPTS(TEST)=0 : METTOTAL["+",0,XT,YT] : DROITE[Screen,235] : DC=190
  994.       S=Screen : Screen Open 3,450,270,64,Lowres : Flash Off : Get Palette S
  995.       Screen To Front S : Screen Copy S,190,0,640,270 To 3,0,0
  996.       Screen Offset 3,85,0 : Screen Close S : Double Buffer 
  997.       Erase 7 : Reserve As Chip Work 7,65000
  998.       A$="MRbruits/Brt4.sbk" : If Not(Exist(A$)) : A$="df0:Brt4.sbk" : End If 
  999.       Load A$,7
  1000.    End If 
  1001. End Proc
  1002. Procedure POSEVAR
  1003.    Screen Open 7,32,10,16,Lowres : Flash Off : Screen Hide 7 : Screen 7
  1004.    For X=1 To 5 : Doke Phybase(0)+2*(X-1),PREF(X) : Next 
  1005.    For X=1 To 4 : Doke Phybase(0)+8+2*X,TPTS(X) : Next 
  1006. End Proc
  1007. Procedure PRENDVAR
  1008.    Screen Hide 7 : Screen 7
  1009.    For X=1 To 5 : PREF(X)=Deek(Phybase(0)+2*(X-1)) : Next 
  1010.    For X=1 To 4 : TPTS(X)=Deek(Phybase(0)+8+2*X) : Next 
  1011.    Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  1012.    Restore : For X=1 To PREF(3) : Read LANGUE$ : Next 
  1013.    Screen Close 7
  1014. End Proc
  1015. Procedure RETOUR
  1016.    Erase 1 : Erase 2 : Del Block : Del Cblock 
  1017.    S=Screen : Screen Open 2,360,270,64,Lowres : Flash Off 
  1018.    Get Palette S : Screen To Front S
  1019.    Screen Copy S,0,0,360,270 To 2,0,0 : Screen Close S
  1020.    CLOCK[280,60] : Load Iff "Decors/Entree"+LANGUE$,1
  1021.    Flash Off : Screen To Front 2
  1022.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  1023.    Screen 2 : Autoback 0 : Screen To Front 2 : N=0 : D=2
  1024.    BRUIT[0,0,"antizoom"]
  1025.    For X=0 To 130 Step 1 : Repeat 
  1026.          H1=X : H2=X+D : H4=350-X : H3=H4-D
  1027.          V1=X : V2=X+D : V4=270-X : V3=V4-D
  1028.          Screen Copy 1,H1,V1,H4,V2 To 2,H1,V1
  1029.          Screen Copy 1,H3,V2,H4,V4 To 2,H3,V2
  1030.          Screen Copy 1,H1,V3,H3,V4 To 2,H1,V3
  1031.          Screen Copy 1,H1,V2,H2,V3 To 2,H1,V2
  1032.          Wait Vbl : Screen Swap : Inc N
  1033.    Until N>1 : Next 
  1034.    Screen Close 2 : Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  1035.    POSEVAR : Screen 1 : A$="A48.amos" : If Exist("df0:"+A$) Then A$="DF0:"+A$
  1036.    Run A$
  1037. End Proc
  1038. '